package subjectlist;

/**
 * 题目描述：用递归的方式实现一个求字符串中连续出现相同字符的最大值。
 * 例如，字符串“aaabbcc”中连续出现字符‘a’的最大值为3，字符串“abbc”中连续出现字符‘b’的最大值为2
 */
public class O如何统计字符串中连续的重复字符个数 {


    /**
     * 分析与解答：
     * 如果不要求采用递归的方法，那么算法的实现就非常简单，只需要在遍历字符串时定义两个额外的变量curMaxLen与maxLen，
     * 分别记录与当前遍历的字符重复的连续字符的个数和遍历到目前为止找到的最长的连续重复字符的个数。
     * 在遍历时，如果相邻的字符相等，则执行curMaxLen+1；否则，更新最长连续重复字符的个数，即maxLen=max（curMaxLen, maxLen），
     * 由于碰到了新的字符，因此，curMaxLen=1。本题要求用递归的方法来实现，通过对非递归方法进行分析可以知道，
     * 在遍历字符串时，curMaxLen与maxLen是最重要的两个变量，
     * 那么在进行递归调用时，通过传入两个额外的参数（curMaxLen与maxLen）就可以采用与非递归方法类似的方法来实现
     */
    public static int getMaxDupChar(String s,int startIndex,int curMaxLen,int maxLen){
        //字符串遍历结束，返回最长重复连续重复字符的长度
        if (startIndex == s.length() - 1) {
            return Integer.max(curMaxLen,maxLen);
        }
        //如果两个连续的字符相等，则在递归调用的时候把当前最长串的程度加1
        if (s.charAt(startIndex) == s.charAt(startIndex + 1)) {
            return getMaxDupChar(s,startIndex+1,curMaxLen+1,maxLen);
        }else {
            return getMaxDupChar(s,startIndex+1,1,Integer.min(curMaxLen,maxLen));
        }
    }


    public static void main(String[] args) {
        getMaxDupChar("abbc",0,1,1);
        System.out.println();
        getMaxDupChar("aaabbcc",0,1,1);
    }
}
